package com.spring.redis.operation.service.base;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * redis Operation string base interface
 *
 * @author zhouyu
 */
public interface StringRedisBaseService {

    /**
     * 存储string类型
     *
     * @param key   key
     * @param value value
     */
    void set(String key, String value);

    /**
     * 存储string类型，并设置key的有效时间
     *
     * @param key     key
     * @param value   value
     * @param seconds 过期时间，单位秒，为null不过期
     */
    void setEx(String key, String value, Long seconds);

    /**
     * 存储string类型，并设置key的有效时间
     *
     * @param key      key
     * @param value    value
     * @param expire   自定义过期时间
     * @param timeUnit 时间类型
     */
    void setEx(String key, String value, Long expire, TimeUnit timeUnit);

    /**
     * 获取string类型的值
     *
     * @param key key
     * @return String
     */
    String get(String key);

    /**
     * 批量获取String类型的值
     *
     * @param keys keys
     * @@return java.util.List<String>
     */
    List<String> multiGet(String... keys);

    /**
     * 递增num，num<0时递减
     *
     * @param key     key
     * @param initNum initNum
     * @param num     num
     * @return java.lang.Long
     */
    Long increment(String key, Long initNum, Long num);

    /**
     * 获取自增自减值
     *
     * @param key key
     * @return java.lang.Long
     */
    Long incrementValue(String key);

}
